package acl.bussiness;

import acl.hibernate.dao.Rolesdao;
import acl.hibernate.po.OaRoles;
import acl.hibernate.po.OaRolesPermissions;
import acl.hibernate.po.OaUsers;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

public class RoleBusiness {
	Rolesdao rolesdao=new Rolesdao();
	public Logger logger = Logger.getLogger(this.getClass());
	/*
	 * 根据用户id获取他所创建的角色
	 */
	public List getRolesByCreatUserId(Integer id) {
		return rolesdao.getRolesByCreatUserId(id);
	}
	/*
	 * 根据角色id删除角色权限映射
	 */
	public void deleteRoles_Permissions(Integer role_id) {
		rolesdao.deleteRoles_Permissions(role_id);
	}
	/*
	 * 根据角色id删除用户角色映射
	 */
	public void deleteUsers_Roles(Integer role_id) {
		rolesdao.deleteUsers_Roles(role_id);
	}
	/*
	 * 根据id删除角色
	 * @param id 待删除角色id
	 * @return 删除成功返回true，否则false
	 */
	public boolean deleteRoleById(Integer id) {//
		return rolesdao.delete(OaRoles.class, id);
	}
	/*
	 * 	批量删除角色
	 * @param ids 待删除id字符串数组，已逗号分隔
	 */
	public void deleteCheckedRolesByIds(String ids) { 
		String[] idArray=ids.split(",");
		rolesdao.deleteCheckedRolesByIds(idArray);
	}
	
	public List getRolesByOwnAndCreatId(Integer id,Integer nowId){
		//给用户分配角色，获取该用户可以用但尚未拥有的角色
		//Author:Silence
		List all = this.getRolesByCreatUserId(nowId);
		List hased = this.getRoleHased(id);
		try{
           for(int i = 0;i<hased.size();i++){
        	   for(int j = all.size()-1;j>-1;j--){
        		   if(((OaRoles)all.get(j)).getId().equals(((OaRoles)hased.get(i)).getId())){
        			   all.remove(j);
        		   }
        	   }
           }
			
		}catch(Exception e){	
		}
		return all;
	}
	public List getRoleHased(Integer id){
		//获取可以删除的角色，其范围是用户已有的角色
		return rolesdao.getRolesByRolesId(rolesdao.getRolesByUserId(id));
	}
	public boolean deleteRolesHased(Integer userId,String id){
		//删除用户的角色
		return rolesdao.deleteRolesHased(userId, id);
	}
	public boolean givePersonRoles(Integer userId,String id){
		//添加用户的角色
		return rolesdao.givePersonRoles(userId, id);
	}
	/*
	 *  根据角色id获取角色信息
	 *  @param roleid 角色id
	 */
	public OaRoles getRoleByRoleid(Integer roleid) {
		OaRoles role=(OaRoles)rolesdao.getById(OaRoles.class.getName(), roleid);
		return role;
	}
	/*
	 * 根据角色名称获取角色
	 */
	public OaRoles getRoleByName(String roleName) {
		String strhql="from OaRoles as o where o.rolename='"+roleName+"'";
		List result=rolesdao.find(strhql);
		if(result==null||result.size()==0)
		{
			return null;
		}
		return (OaRoles)result.get(0);
	}
	/*
	 * 更新或保存角色信息
	 * @param oaRoles 待保存的角色
	 */
	public boolean saveOrUpdateRole(OaRoles oaRoles){
		if(oaRoles==null||oaRoles.getRolename().equals(""))
		{
			logger.error("角色名称不能为空，保存失败！");
			return false;
		}
		//若是创建新角色，首先判断角色名称是否已存在，再设置创建时间created
		//若是编辑现有角色，设置修改时间modified
		if(oaRoles.getId()==null||oaRoles.getId().equals(0))
		{//新建角色			
			if(this.getRoleByName(oaRoles.getRolename())!=null)
			{//角色名称重复
				logger.error("角色名已存在，不能保存！");
				return false;
			}
			oaRoles.setCreated((new Date()).toString());
		}
		else
		{//编辑角色
			oaRoles.setModified((new Date()).toString());
		}
		return rolesdao.saveOrupdate(oaRoles);
	}
	/*
	 * 获取所有角色
	 */
	public List getAllRole()
	{
		return rolesdao.getList(OaRoles.class.getName());
	}
	public List getRoleByPage(int pageNo,int pageSize)
	{
		List result=null;
		String strhql=" from OaRoles as o ";
		result=rolesdao.query(pageNo, pageSize, strhql);
		return result;
	}
	public void saveOrUpdateRolesPermissions(OaRolesPermissions oaRolesPermissions){//更新或保存权限
		try {
			rolesdao.saveOrUpdateRolesPermissions(oaRolesPermissions);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
